home *** CD-ROM | disk | FTP | other *** search
/ PC Electronics Plus 3 / PC Electronics Plus 3.iso / subdwg / lsp / anorma.lsp next >
Lisp/Scheme  |  1994-11-18  |  9KB  |  259 lines

  1. ;***********************************************************************
  2. ;* Funcion: aNorma
  3. ;* Comentarios: se usa para definir un area en torno a la cual
  4. ;* la norma tiene validez. Para usar este comando hay que definir
  5. ;* previamente la opcion de hatch. Esto es escoger el patron,
  6. ;* escala y color.
  7. ;***********************************************************************
  8. ;
  9. ; Change Log
  10. ; 18/11/94 C.Perigault 
  11. ;
  12. ;
  13. (defun c:aNorma ( / listaNormas listaTensiones listaDistancias
  14.             listaAsociacionDistancias radio norma tension distancia
  15.             osmode cmdecho gridmode angulo p1 p2 distancia conjunto
  16.             n i pi pi/2 entidad ucs wcs)
  17.  
  18. (setq ucs 1)
  19. (setq wcs 0)
  20.   ;**********************************************************************
  21.   ;* Funcion : (printMenu lista)
  22.   ;* Comentarios : Esta funcion se utiliza para imprimir menus de seleccion
  23.   ;* en la pantalla de texto del acad para que el usuario seleccione
  24.   ;* una alternativa. La lista debe ser de la forma  (clave descripcion)
  25.   ;* donde la clave es un numero u otro objeto y descripcion un texto
  26.   ;* (generalmente)
  27.   ;************************************************************************
  28.   (defun printMenu (lista / listaTemp numeroDeFilas numero opcion)
  29.     (textscr)
  30.     (setq listaTemp lista)
  31.     (while listaTemp
  32.       (setq numeroDeFilas 0)
  33.       ; mientras tengamos elementos en la listaTemp o el numero de filas
  34.       ; sea menor que 20 imprimimos el menu en la pantalla
  35.       (while (and (< numeroDeFilas 20) listaTemp)
  36.     (princ "\n[")
  37.     (setq numero (car (car listaTemp)))
  38.     (if (< numero 10) (princ " "))
  39.     (princ numero)
  40.     (princ "] ")
  41.     (princ (cadr (car listaTemp)))
  42.     (setq numeroDeFilas (+ numeroDeFilas 1))
  43. l    (setq listaTemp (cdr listaTemp)))
  44.       (princ "\n")
  45.       (princ "\nIngrese el numero de su opcion o [enter] para continuar: ")
  46.       (setq opcion (getint ))
  47.       (if (assoc opcion lista) (setq listaTemp nil)))
  48.     (graphscr)
  49.     opcion)
  50.   ; En esta es la lista de las principales normas
  51.   (setq listaNormas '((1 "ANSI")
  52.              (2 "IEEE")
  53.              (3 "CEI NORMAL")
  54.              (4 "CEI REDUCIDA")
  55.              (5 "VDE REDUCIDA")
  56.              (6 "ENDESA")))
  57.   ; Estos son los niveles de tension normalizados
  58.   (setq listaTensiones '((1 "60-69 KV")
  59.                (2 "110 KV")
  60.                (3 "132 KV")
  61.                (4 "154 KV")
  62.                (5 "220 KV")
  63.                (6 "354 KV")
  64.                (7 "500 KV")))
  65.   ; Estas son las distancias que necesitan ser normalizadas
  66.   (setq listaDistancias
  67.    '((1  "Distancia de conductores fijos : fase-tierra")
  68.      (2  "Distancia de conductores fijos : fase-fase")
  69.      (3  "Distancia de conductores moviles : fase-tierra")
  70.      (4  "Distancia de conductores moviles : fase-fase")
  71.      (5  "Distancia de conductores moviles : distinto circuito fase-fase")
  72.      (6  "Distancia de partes vivas a gabildos de transporte")
  73.      (7  "Distancia horizontal de partes vivas al cierro exterior")
  74.      (8  "Altura al suelo de partes vivas (para peatones)")
  75.      (9  "Altura de conductor al suelo para labores de trans. regiones urbanas con alto nivel de transito" )
  76.      (10 "Altura de conductor al suelo para labores de transporte regiones suburbanas")
  77.      (11 "Altura de conductor al suleo para labores de transporte regiones rurales")
  78.    ))
  79.   ; Esta es la lista que asocia la norma tension y distancia con el
  80.   ; radio del validez de la norma
  81.   ; la lista es de la forma ( (norma tension distancia) radio)
  82.    (setq listaAsociacionDistancias
  83.     ;**ENDESA 60-69 KV**
  84.      '( ((6 1 1) 0.800)
  85.     ((6 1 2) 1.150)
  86.     ((6 1 3) 1.000)
  87.     ((6 1 4) 1.750)
  88.     ((6 1 5) 2.000)
  89.     ((6 1 6) 1.300)
  90.     ((6 1 7) 2.000)
  91.     ((6 1 8) 3.300)
  92.     ((6 1 9) 8.500)
  93.     ((6 1 10) nil)
  94.     ((6 1 11) nil)
  95.     ;**ENDESA 110 KV **
  96.     ((6 2 1) 1.250)
  97.     ((6 2 2) 1.800)
  98.     ((6 2 3) 1.600)
  99.     ((6 2 4) 2.100)
  100.     ((6 2 5) nil)
  101.     ((6 2 6) 1.750)
  102.     ((6 2 7) 2.450)
  103.     ((6 2 8) 3.700)
  104.     ((6 2 9) 9.550)
  105.     ((6 2 10) nil)
  106.     ((6 2 11) nil)
  107.     ;**ENDESA 132 KV **
  108.     ((6 3 1) 1.100)
  109.     ((6 3 2) 1.500)
  110.     ((6 3 3) 2.000)
  111.     ((6 3 4) 2.300)
  112.     ((6 3 5) 2.700)
  113.     ((6 3 6) 1.600)
  114.     ((6 3 7) 2.800)
  115.     ((6 3 8) 3.600)
  116.     ((6 3 9) nil)
  117.     ((6 3 10) nil)
  118.     ((6 3 11) nil)
  119.     ;**ENDESA 154 KV **
  120.     ((6 4 1) 1.500)
  121.     ((6 4 2) 2.500)
  122.     ((6 4 3) 2.200)
  123.     ((6 4 4) 2.800)
  124.     ((6 4 5) nil)
  125.     ((6 4 6) 2.000)
  126.     ((6 4 7) 3.000)
  127.     ((6 4 8) 4.000)
  128.     ((6 4 9) 14.750)
  129.     ((6 4 10) nil)
  130.     ((6 4 11) nil)
  131.     ;**ENDESA 220 KV **
  132.     ((6 5 1) 2.100)
  133.     ((6 5 2) 2.400)
  134.     ((6 5 3) 3.000)
  135.     ((6 5 4) 3.300)
  136.     ((6 5 5) nil)
  137.     ((6 5 6) 2.600)
  138.     ((6 5 7) 2.900)
  139.     ((6 5 8) 5.250)
  140.     ((6 5 9) 16.500)
  141.     ((6 5 10) nil)
  142.     ((6 5 11) nil)
  143.     ;**ENDESA 345 KV **
  144.     ((6 6 1) nil)
  145.     ((6 6 2) nil)
  146.     ((6 6 3) nil)
  147.     ((6 6 4) nil)
  148.     ((6 6 5) nil)
  149.     ((6 6 6) nil)
  150.     ((6 6 7) nil)
  151.     ((6 6 8) nil)
  152.     ((6 6 9) nil)
  153.     ((6 6 10) nil)
  154.     ((6 6 11) nil)
  155.     ;**ENDESA 500 KV **
  156.     ((6 7 1) 3.700)
  157.     ((6 7 2) 4.700)
  158.     ((6 7 3) 5.000)
  159.     ((6 7 4) 6.000)
  160.     ((6 7 5) nil)
  161.     ((6 7 6) 4.200)
  162.     ((6 7 7) 4.500)
  163.     ((6 7 8) 6.500)
  164.     ((6 7 9) nil)
  165.     ((6 7 10) nil)
  166.     ((6 7 11) nil)))
  167.  
  168.  
  169.  
  170.   ; Imprimimos los menus y obtenemos la seleccion del usuario
  171.   (setq radio (getreal "\nIngrese radio o [enter] para normas : "))
  172.   ; si el usuario no ingresa la distancia se le presentan las
  173.   ; normas como alternativas
  174.   (if (not radio)
  175.     (progn
  176.       ; Imprimimos los menus para que el usuario haga la seleccion
  177.       ; adecuada
  178.       (setq norma     (printMenu listaNormas))
  179.       (setq tension   (printMenu listaTensiones))
  180.       (setq distancia (printMenu listaDistancias))
  181.       (setq clave (list norma tension distancia))
  182.        (if (not (cdr (assoc clave listaAsociacionDistancias)))
  183.      ; si la clave no se encuentra le avisamos del erro
  184.      ; al usurio
  185.      (progn
  186.        (princ "\nLa opcion : ")
  187.        (princ clave)
  188.        (princ " no se encuentra ")
  189.        (setq radio nil) )
  190.      ; de encontrase la clave le presentamos la informacion de
  191.      ; esta al usuario
  192.      (progn
  193.        (princ "\n\n\nNorma : " )
  194.        (princ (cadr (assoc norma listaNormas)))
  195.        (princ "   Tension: ")
  196.        (princ (cadr (assoc tension listaTensiones)))
  197.        (princ "  Distancia :")
  198.        (princ  (cadr (assoc clave listaAsociacionDistancias)))
  199.        (princ " [m]\n")
  200.        (princ (cadr (assoc distancia listaDistancias)))
  201.        (setq radio (cadr (assoc clave listaAsociacionDistancias)))))))
  202.   ; guardamos el estado del sistema al entrar al comando
  203.   (if radio
  204.     (progn
  205.       (setq osmode   (getvar "OSMODE"  ))
  206.       (setq cmdecho  (getvar "CMDECHO" ))
  207.       (setq gridmode (getvar "GRIDMODE"))
  208.       (setvar "GRIDMODE" 0)
  209.       (setvar "CMDECHO"  0)
  210.       (setvar "OSMODE"   0)
  211.       (setq pi 3.14159265359)
  212.       (setq pi/2 (/ pi 2.0))
  213.       (princ "\nSeleccione lineas: ")
  214.       (setq conjunto (ssget))
  215.       (setq n (sslength conjunto))
  216.       (setq i 0)
  217.       ; es aqui donde empezmoas a dibujar las areas
  218.       ; solo se pueden dibujar areas para lineas y polinineas
  219.      (while (< i n)
  220.        (setq entidad (entget (ssname conjunto i)))
  221.        ; Transformamos los punto del wcs al ucs
  222.        ; para evitar complicaciones por las vistas
  223.        (setq p1 (trans (cdr (assoc 10 entidad)) wcs ucs))
  224.        (setq p2 (trans (cdr (assoc 11 entidad)) wcs ucs))
  225.        ; solo si enxisten p1 y p2 graficamos el area
  226.       (if (and p1 p2)
  227.     (progn
  228.       (setq distancia (distance p1 p2))
  229.       (setq angulo    (angle    p1 p2))
  230.       (command  "PLINE"  p1 (polar p1 (+ angulo pi/2 ) radio)
  231.            "ARC" "CE" p1 (polar p1 (+ angulo pi) radio)
  232.            "LINE"   p1 "")
  233.       (command "hatch" "" "" "" (entlast) "" )
  234.       (command  "PLINE"  p1 (polar p1 (+ angulo pi ) radio)
  235.           "ARC" "CE" p1 (polar p1 (- angulo pi/2) radio)
  236.           "LINE"   p1 "")
  237.       (command "hatch" "" "" "" (entlast) "" )
  238.       (command  "PLINE"  p2 (polar p2 angulo radio)
  239.           "ARC" "CE" p2 (polar p2 (+ angulo pi/2) radio)
  240.           "LINE"   p2 "")
  241.       (command "hatch" "" "" "" (entlast) "" )
  242.       (command  "PLINE"  p2 (polar p2 (- angulo pi/2) radio)
  243.           "ARC" "CE" p2 (polar p2 angulo  radio)
  244.           "LINE"   p2 "")
  245.       (command "hatch" "" "" "" (entlast) "" )
  246.       (command  "PLINE"  p1 p2 (polar p2 (+ angulo pi/2) radio)
  247.                  (polar p1 (+ angulo pi/2) radio)
  248.                  p1 "")
  249.       (command "hatch" "" "" "" (entlast) "" )
  250.       (command  "PLINE"  p1 p2 (polar p2 (- angulo pi/2) radio)
  251.                  (polar p1 (- angulo pi/2) radio)
  252.                  p1 "")
  253.       (command "hatch" "" "" "" (entlast) "")
  254.       (setq i (+ i 1)))))
  255.       ; volvemos al sistema a su estado inicial
  256.       (setvar "GRIDMODE" gridmode)
  257.       (setvar "OSMODE"   osmode  )
  258.       (setvar "CMDECHO"  cmdecho ))))